import http from 'wechat-http'

// 接口基础地址
http.baseURL = 'https://live-api.itheima.net'

// 请求拦截器
http.intercept.request = (options) => {
  // 指定默认的头信息
  const defaultHeader = {}
  // 权限认证
  defaultHeader.Authorization = 'Bearer ' + wx.getStorageSync('token')
  // 合并头信息
  options.header = Object.assign({}, defaultHeader, options.header)
  // 拦截器处理后的请求参数
  return options
}

// 响应拦截器
http.intercept.response = async (response) => {
  // console.log(statusCode) // http 响应状态码
  // console.log(config) // 发起请求时的参数
  // // 拦截器处理后的响应结果
  // console.log(response);
  const { message, code, data } = response.data
  if (code === 10000) {
    return data
  } else {
    wx.utils.toast(message, 'error')
    // 无感刷新token
    if (code === 401) {
      if (response.config.url.includes('/refreshToken')) {
        // 清空本地存储
        wx.removeStorageSync('token')
        wx.removeStorageSync('refreshToken')
        // 清空app上的存储
        getApp().setToken(null, null)
        const currentPages = getCurrentPages()
        // console.log(currentPages);
        const redirectUrl = currentPages[0].route
        wx.redirectTo({
          url: '/pages/login/index?redirectUrl=/' + redirectUrl,
        })
      } else {
        const { token, refreshToken } = await http({
          url: '/refreshToken',
          method: 'POST',
          header: {
            Authorization: 'Bearer ' + wx.getStorageSync('refreshToken')
          }
        })
        // 本地存储
        wx.setStorageSync('token', token)
        wx.setStorageSync('refreshToken', refreshToken)
        // 在app上存储一份
        getApp().setToken(token, refreshToken)
        // 继续之前的请求
        const config = Object.assign(response.config, {
          header: {
            Authorization: 'Bearer ' + token
          }
        })
        return http(config)
      }

    }
    return Promise.reject(message)
  }
}

// 挂载到 wx 全局命名空间
wx.http = http

// 也可作为模块导出
export default http